\section{Projektowanie operacji na danych: zdefiniowanie kwerend dla realizacji funkcji wyspecyfikowanych w projekcie}
Poniżej znajdują się ciekawsze zapytania do bazy. Trudno je powiązać z konkretną funkcjonalnością, gdyż są używane wielokrotnie. Pozostałe zapytania są proste, ale wynika to głównie z zastosowania dwóch widoków, które wiążą tabele ze sobą, dokonują operacji wyliczajacych godziny odjazdów (\textit{timetable\_view}) i pozwalają na bardzo duże uproszczenie zapytań. Definicje widoków można znaleźć w rozdziale 11.
\begin{lstlisting}
 $sql    = 'SELECT przystanki_id FROM (SELECT przystanki_id, numer_kolejny FROM trasy WHERE linie_id = '.$line.') AS kol WHERE numer_kolejny=0 OR numer_kolejny = (SELECT numer_kolejny FROM trasy WHERE trasy.linie_id ='. $line .'ORDER BY numer_kolejny DESC LIMIT 1)';
\end{lstlisting}
Powyższe zapytanie zwróci dwa wiersze, zawierające pierwszy i ostatni przystanek trasy. Funkcja ta jest używana zarówno przy edycji rozkładu jak i jego pokazywania.
\textit{\$sql} jest ciągiem znaków zawierającym ostateczne zapytanie, \textit{\$line} to numer(id) linii.

\begin{lstlisting}
 $sql    = 'SELECT id, przystanki.nazwa, ulica1_id, (SELECT ulice_d.nazwa FROM ulice_d WHERE ulice_d.id = ulica1_id) AS ulica1, ulica2_id, (SELECT ulice_d.nazwa FROM ulice_d WHERE ulice_d.id = ulica2_id) AS ulica2 FROM "public"."przystanki" ORDER BY "nazwa";';
\end{lstlisting}
Powyższa funkcja zwraca listę przystanków, wraz z nazwami ulic które znajdują się w pobliżu przystanku (2.1.3)
\begin{lstlisting}
$sql = 'SELECT przesuniecia.id AS offset_id, przystanki.nazwa AS nazwa, przesuniecia.offset FROM przesuniecia LEFT JOIN trasy ON trasy.id = przesuniecia.trasy_id LEFT JOIN przystanki ON przystanki.id = trasy.przystanki_id WHERE trasy.linie_id = '. $line .' AND przesuniecia.powrotna = \''.$reverse.'\' ORDER BY numer_kolejny '. $sortOrder;
\end{lstlisting}
Powyższe zapytanie zwróci listę przesunięć i nazw przystanków dla wybranej linii i kierunku. Jest to niezbędne do umożliwienia edycji trasy (przesunięć) - (1.1.3).

Warto nadmienić, że operacje takie jak utworzenie linii wykonywane są w transakcji, ze względu na konieczność stworzenia trasy, przesunięći samej linii. Stąd zakładmy, że jeśli któraś z operacji nie powiedzie się, to cofamy całą transakcję (gdyby wstawiona została np linia, bez trasy bądź opóźnień spowodowałoby to niepoprawne działanie programu). Ze względu na obszerność kodu, nie wstawiamy go tutaj. Wszystkie operacje na bazie danych znajdują się w pliku ``dbdriver.php''

